The present invention relates to code readers and more specifically to code readers that attempt to optimize decode processes to decode code candidates in a rapid succession of obtained images.
Automated identification of products using optical codes has been broadly implemented throughout industrial operations and in many other applications for many years. Optical codes are patterns composed of elements with different light reflectance or emission, assembled in accordance with predefined rules. The elements in the optical codes may be bars or spaces in a linear barcode, or the on/off pattern in a two-dimensional matrix code. The bar code or symbols can be printed on labels placed on product packaging, or directly on the product itself by direct part marking. The information encoded in a bar code or symbol can be decoded using optical readers in fixed-mount installations or in portable hand held devices. In the case of a fixed-mount device, often a transfer line or the like is provided that moves objects marked with codes or symbols by a device detector so that the detector can generate images of the codes.
At least some reader devices include a camera capable of generating two dimensional images of a field of view. For example, many systems currently employ a two dimensional CCD image sensor which obtains images and generates image data which is provided to a processor. The processor is programmed to examine image data to identify code candidates (e.g., bar code or symbol candidates) and attempt to decode the code candidates. At least some reader devices are programmed to obtain images of a FOV in rapid succession and to attempt to decode any code candidates in the obtained images as quickly as possible. To decode codes, the processor runs one or more decode algorithms.
Where objects are moved through a device's FOV via a transfer line or the like as images are obtained, in many cases a large number of images of the same object and applied code are obtained with the object and code in different locations along the direction of travel through the FOV. Here, some code candidates in an image will be new to the FOV (i.e., the candidates were located outside the FOV during previous images) and some will be exiting the FOV prior to generation of a subsequent image.
When obtaining an image of a code, the quality of the image depends on several factors including the angle of a sensor with respect to a surface on which the code is applied, the material and texture of the surface on which the code is applied, code marking quality or damage after marking, ambient and device lighting characteristics, distortion in the applied symbol, transfer line speed, distance from the surface on which the code is applied, optical blur, camera resolution, etc. Image quality affects the ability of a processor running a specific algorithm to decode a code. For example, in many cases a simple decoding algorithm will not be able to successfully decode codes in an image unless the circumstances surrounding image acquisition are substantially ideal.
To compensate for imperfect image acquisition, relatively more complex decode algorithms have been developed. For instance, several decode algorithms have been developed which can at least partially compensate for imperfect lighting, a curved surface that a code is applied to, imperfect sensor angle with respect to the surface that a code is applied to, etc.
While complex decode algorithms work well to compensate for imperfect images, one drawback is that complex algorithms often require a greater amount of processing power and a commensurate greater amount of time to perform. While more expensive algorithms are not an issue in some applications, in applications where images are obtained in rapid succession, expensive algorithms requiring long periods to complete can result in computational requirements that far exceed capabilities of reader processors. More specifically, in some cases, image sensors are capable of obtaining and providing images so quickly that a reader device processor cannot perform a complex algorithm on all code candidates in an image prior to receiving a next image.
Where a processor cannot keep up with the computational demands required to perform a complex algorithm for all code candidates in a rapid succession of images, one solution may be to forego analysis of candidates in next images until a reader device has attempted to decode all code candidates in a current image. Thus, for instance, where second through fourth images are obtained during the period required to attempt to decode all code candidates in a first image, the second through fourth images would be discarded when a fifth image is obtained and code candidates in the fourth image would be examined. While this solution ensures that the complex algorithm is applied to all candidates in a current or first image, this solution simply ignores code candidates in the second through fourth image while candidates in the first image are processed despite the fact that candidates in the subsequent images may be better suited to be decoded. In this case, the end result may be that some codes that pass through a field of view are never successfully decoded.